package com.常用类.String;

/**
 * 作    者 ：吾路巴尼
 * 创建时间 ：2025/2/23-21:34
 */
public class String的直接赋值与new {
    public static void main(String[] args) {
        /**  直接赋值：String str1 = "hello";   即：str1直接指向常量池中的地址
         * 赋值前先去常量池找有没有该字符串"hello"，
         * 如果有，str1就直接指向该常量池中的地址，如果没有就创建一个"hello"，再让Str1指向该常量池中的地址。
         * */
        String str1 = "hello";
        /**
         * 创建字符串的方式：String str2 = new String("hello");
         * 即：str2指向堆上对象的value，value指向常量池中的地址
         * 1.先在堆上创建一个对象空间，里面有属性：value数组，让str2指向堆上的对象空间的value
         * 2.然后去常量池找有没有"hello"，
         * 3.如果有就直接让堆上对象的value数组指向常量池中的地址，如果没有就创建一个"hello"，再让对象的value指向常量池中的地址。
         */
        String str2 = new String("hello");

        System.out.println(str1 == str2);//str1指向常量池，str2指向堆，输出false
        System.out.println(str1.equals(str2));//但是str1和str2最终保存的值相同，所以输出true
    }
}

